home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Precision Software Appli…tions Silver Collection 1
/
Precision Software Applications Silver Collection Volume One (PSM) (1993).iso
/
tutor
/
dos1ref.exe
/
CHAPTER.003
< prev
next >
Wrap
Text File
|
1990-03-21
|
139KB
|
2,966 lines
** Programmer's Technical Reference for MSDOS and the IBM PC **
┌─────────────────────────────┐
│ Shareware Version, 03/21/90 │
│ Please Register Your Copy │
└─────────────────────────────┘
Copyright (c) 1987, 1990 Dave Williams
C H A P T E R T H R E E
THE PC ROM BIOS - Interrupts 10h through 19h
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 10h Video I/O - services to handle video output │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0040h) The ROM video routines in the original PC BIOS are designed for
use with the Color Graphics Adapter and incorporate code to test
for the horizontal retrace before writing. The check is
performed no matter what actual display adapter is installed.
The ROM character table for the first 128 characters is located
at 0FA6Eh in the PC. Int 01Fh can be used to point to a second
table of 128 characters.
CS, SS, DS, ES, BX, CX, DX are preserved during call. All
others are destroyed.
Function 00h Determine or Set Video State
entry AH 00h set video mode
AL display mode: CGA|PCjr|MDA|MCGA|EGA|VGA|8514
00h 40x25 B/W text CGA|PCjr| | |EGA| |
16 color 40x25, 320x400 graphics | | |MCGA| | |
16 color 40x25, 360x400 graphics | | | | |VGA|
16 color 01h 40x25 color text CGA|PCjr| | |EGA| |
02h 80x25 B/W text CGA|PCjr| | |EGA| |
16 color 80x25 640x400 graphics | | |MCGA| | |
16 color 80x25 720x400 graphics | | | |VGA| |
16 color 03h 80x25 color text CGA|PCjr| | |EGA|VGA|
4 color 04h 320x200 color graphics CGA|PCjr| | |EGA| |
4 tone gray 05h 320x200 B/W graphics CGA|PCjr| | |EGA| |
2 color 06h 640x200 B/W graphics CGA|PCjr| | |EGA| |
monochrome 07h 80x25 monochrome text | |MDA| |EGA| |
16 color 08h 160x200 color graphics CGA|PCjr| | | | |
16 color 09h 320x200 color graphics |PCjr| | | |VGA|
4 color 0Ah 640x200 color graphics |PCjr| | | | |
N/A 0Bh BIOS font load | | | |EGA|VGA|
N/A 0Ch BIOS font load | | | |EGA|VGA|
16 color 0Dh 320x200 graphics | | | |EGA|VGA|
16 color 0Eh 640x200 graphics | | | |EGA|VGA|
monochrome 0Fh 640x350 graphics | | | |EGA|VGA|
16 & 64 color 10h 640x350 color hi-res | | | |EGA|VGA|
2 color 11h 640x480 graphics | | |MCGA| |VGA|
16 color 12h 640x480 graphics | | | | |VGA|
256 color 13h 320x200 graphics | | |MCGA| |VGA|8514
14h-20h used by EGA and VGA graphics modes
18h 132x44 8x8 char mono | Tseng Labs EVA
19h 132x25 8x14 char mono | Tseng Labs EVA
1Ah 132x28 8x13 char mono | Tseng Labs EVA
monochrome 21h Hercules Graphics, Graphics Page 1
monochrome 22h Hercules Graphics, Graphics Page 2
22h 132x44 | Tseng, Ahead
23h 132x25 | Tseng Labs EVA
132x25 | Ahead Systems EGA2001
132x25 | ATI EGA Wonder
24h 132x28 | Tseng Labs EVA
25h 80x60 640x480 | Tseng Labs EVA
16 color 640x480 | VEGA VGA
26h 80x60 | Tseng Labs EVA
80x60 640x480 | Ahead Systems EGA2001
16 color 27h 720x512 | VEGA VGA
monochrome 132x25 | ATI EGA Wonder
28h unknown | VEGA VGA
16 color 29h 800x600 | VEGA VGA
256 color 2Dh 640x350 | VEGA VGA
256 color 2Eh 640x480 | VEGA VGA
256 color 2Fh 720x512 | VEGA VGA
256 color 30h 800x600 | VEGA VGA
unknown | AT&T 6300
16 color 36h 960x720 | VEGA VGA
16 color 37h 1024x768 | VEGA VGA
monochrome 132x44 | ATI EGA Wonder
2 color 40h 640x400 | AT&T 6300
80x43 | VEGA VGA
16 color 41h 640x200 | AT&T 6300
132x25 | VEGA VGA
16 color 42h 640x400 | AT&T 6300
132x43 | VEGA VGA
43h unsupported 640x200 of 640x400 viewport AT&T 6300
80x60 | VEGA VGA
44h disable VDC and DEB output | AT&T 6300
100x60 | VEGA VGA
48h 80x50 640x400 | AT&T 6300
4Dh 120x25 | VEGA VGA
4Eh 120x43 | VEGA VGA
4Fh 132x25 | VEGA VGA
monochrome 50h 132x25 | Ahead Systems EGA2001
16 color 640x480 | Paradise EGA-480
monochrome 80x43 | VEGA VGA
640x480 mono? | Taxan 565 EGA
51h 80x30 | Paradise EGA-480
monochrome 132x25 | VEGA VGA
640x480 ? | ATI EGA Wonder
monochrome 52h 132x44 | Ahead Systems EGA2001
monochrome 132x43 | VEGA VGA
752x410 ? | ATI EGA Wonder
53h 800x560 ? | ATI EGA Wonder
54h 132x43 | Paradise EGA-480
16 color 132x43 | Paradise VGA
16 color 132x43 | Paradise VGA on multisync
132x43 | Taxan 565 EGA
55h 132x25 | Paradise EGA-480
16 color 132x25 | Paradise VGA
16 color 132x25 | Paradise VGA on multisync
132x25 | Taxan 565 EGA
56h 132x43 | NSI Smart EGA+
132x43 | Paradise VGA
132x43 | Paradise VGA on multisync
monochrome 132x43 | Taxan 565 EGA
57h 132x25 | NSI Smart EGA+
132x25 | Paradise VGA
132x25 | Paradise VGA on multisync
monochrome 132x25 | Taxan 565 EGA
58h 100x75 800x600 16/256k | Paradise VGA
59h 100x75 800x600 | Paradise VGA
5Eh 640x400 | Paradise VGA,VEGA VGA
5Fh 640x480 | Paradise VGA
60h 80x? ?x400 | Corona/Cordata BIOS v4.10+
752x410 | VEGA VGA
60h 400 line graphics+80 col text |(Corona/Cordata)
61h 400 line graphics | Corona/Cordata BIOS v4.10+
720x540 | VEGA VGA
62h 800x600 | VEGA VGA
16 color 71h 100x35 800x600 | NSI Smart EGA+
74h 640x400 graphics | Toshiba 3100
7Eh Special Mode Set | Paradise VGA (see below)
BX horizontal dimension of the mode desired
CX vertical dimension of the mode desired
(both BX/CX in pixels for graphics modes, rows
for text modes)
DX number of colors of the mode desired
(use 0 for monochrome modes)
return BH 7Eh if successful
7Fh Special Function Set | Paradise VGA (see below)
BH 00h Set VGA Operation
01h Set Non-VGA Operation
02h Query Mode Status
return BL 0 if operating in VGA mode
1 if non-VGA mode.
CH total video RAM size in 64k byte units
CL video RAM used by the current mode
03h Lock Current Mode
Allows current mode (VGA or non-VGA) to
survive reboot.
BH 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh
write paradise registers 0,1,2,3,4,5
(port 03CEh indexes A,B,C,D,E,F)
BL value to set in the paradise register.
BH 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh
read paradise registers 0,1,2,3,4,5
(port 03CEh indexes A,B,C,D,E,F)
return BL value of the Paradise register
BH 7Fh if successful.
note Color modes (0,1,2,3,4,5,6) will set non-VGA CGA
operation. Monochrome mode 7 will set non-VGA
MDA/Hercules operation.
82h 80x25 B&W | AT&T VDC overlay mode *
83h 80x25 | AT&T VDC overlay mode *
86h 640x200 B&W | AT&T VDC overlay mode *
C0h 640x400 2/prog pallet | AT&T VDC overlay mode *
C4h disable output | AT&T VDC overlay mode *
D0h 640x400 | DEC VAXmate AT&T mode
unknown 640x225 | Z-100
unknown 640x400 | Z-100
note 1) If the high bit in AL is set, the display buffer is not cleared when a
new mode is selected. This may be used to mix modes on the display;
for example, characters of two difference sizes might be displayed
2) Modes 8-10 are available on the PCjr, Tandy 1000, and PS/2
3) IBM claims 100% software and hardware emulation of the CGA with the
MCGA chipset. All registers may be read and written as CGA. All
characters are double-scanned to give 80x25 with 400 line resolution.
The attributes for setting border color may be set on MCGA, but the
borders will remain the default color (they cannot actually be set)
4) The IBM Color Graphics Adapter (CGA) is too slow for the screen to
be updated before the vertical retrace of the monitor is completed.
If the video RAM is addressed directly, the screen will have "snow"
or interference. IBM's default is to turn the adapter off when it is
being updated, ie "flickering" when the display is scrolled.
5) The vertical retrace signal may be ignored when using the MCGA adapter.
The MCGA will not generate snow when written to. There is no flicker
with the MCGA.
6) The PCjr Video Gate Array uses a user-defined block of main system RAM
from 4 to 32k in size instead of having dedicated memory for the
display. Vertical retrace may be ignored when writing to the PCjr.
There is no flicker with the PCjr display.
7) The Hercules Graphics Card has 750x348 resolution
8) The Hercules Graphics Card takes 64k beginning at B:000 (same as MDA)
9) The CGA, MCGA, and VGA adapters use hardware address B:800
10) The BIOS clears the screen when the mode is set or reset.
11) For AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
40h, or 44h
12) Int 10 will take the shapes of the first 128 characters (00h-7Fh) from
the table located in ROM at absolute address F000:FA6E. The EGA and VGA
have hardware capability to change this.
Function 01h Set Cursor Type - set the size of the cursor or turn it off
entry AH 01h
CH bit values:
bits 0-4 top line for cursor in character cell
bits 5-6 blink attribute
00 normal
01 invisible (no cursor)
10 slow (not used on original IBM PC)
11 fast
CL bit values:
bits 0-4 bottom line for cursor in character cell
return none
note 1) The ROM BIOS default cursors are: start end
monochrome mode 07h: 11 12
text modes 00h-03h: 6 7
2) The blinking in text mode is caused by hardware and cannot be turned
off, though some kludges can temporarily fake a nonblinking cursor
3) The cursor is automatically turned off in graphics mode
4) Another method of turning off the cursor in text mode is to position it
to a nondisplayable address, such as (X,Y)=(0,25)
5) Buggy on EGA systems - BIOS remaps cursor shape in 43 line modes, but
returns unmapped cursor shape
Function 02h Set Cursor Position - reposition the cursor to (X,Y)
entry AH 02h
BH video page
00h graphics mode
03h modes 2 and 3
07h modes 0 and 1
DH row (Y=0-24)
DL column (X=0-79 or 0-39)
return none
note 1) (0,0) is upper left corner of the screen
Function 03h Read Cursor Position - return the position of the cursor
entry AH 03h
BH page number
00h in graphics modes
03h in modes 2 & 3
07h in modes 0 & 1
return CH top line for cursor (bits 4-0)
CL bottom line for cursor (bits 4-0)
DH row number (Y=0-24)
DL column number (X=0-79 or 0-39)
Function 04h Read Light Pen - fetch light pen information
entry AH 04h
return AH 00h light pen not triggered
AH 01h light pen is triggered, values in resgisters
BX pixel column (X=0-319 or 0-639) graphics mode
CH raster line (Y=0-199) old graphics modes
CX (EGA) raster line (0-nnn) new graphics modes
DH row of current position (Y=0-24) text mode
DL column of current position (X=0-79 or 0-39) text mode
note Not supported on PS/2
Function 05h Select Active Page - set page number for services 6 and 7
entry AH 05h
AL number of new active page
0-7 modes 00h and 01h (CGA)
0-3 modes 02h and 03h (CGA)
0-7 modes 02h and 03h (EGA)
0-7 mode 0Dh (EGA)
0-3 mode 0Eh (EGA)
0-1 mode 0Fh (EGA)
0-1 mode 10h (EGA)
0 set address of graphics bitmap buffer (modes 60h,61h)
BX segment of buffer
0Fh get address of graphics bitmap buffer (modes 60h,61h)
BX segment of buffer
for PCjr only:
AL 80h to read CRT/CPU page registers
81h to set CPU page register to value in BL
82h to set CRT page register to value in BH
83h to set both CPU and page registers
(and Corona/Cordata BIOS v4.10+)
BH CRT page number for subfunctions 82h and 83h
BL CPU page register for subfunctions 81h and 83h
return standard PC none
PCjr if called with AH bit 7=1 then
BH CRT page register (if AL >= 80h)
BL CPU page register (if AL >= 80h)
DX segment of graphics bitmap buffer (video modes 60h,61h; AL=0Fh)
note 1) Mono adapter has only one display page
2) CGA has four 80x25 text pages or eight 40x25 text pages
3) A separate cursor is maintained for each display page
4) Switching between pages does not affect their contents
5) Higher page numbers indicate higher memory positions
Function 06h Scroll Page Up - scroll up or clear a display "window"
entry AH 06h
AL number of lines blanked at bottom of page
0 = blank entire window
BH attributes to be used on blank line
CH row (Y) of upper left corner or window
CL column (X) of upper left corner of window
DH row (Y) of lower right corner of window
DL column (X) of lower right corner of window
return none
note 1) Push BP before scrolling, pop after
2) If in CGA text mode, affects current page only
Function 07h Scroll Page Down - scroll down or clear a display "window"
entry AH 07h
AL number of lines to be blanked at top of page
0 = blank entire window
BH attributes to be used on blank line
CH row (Y) of upper left corner or window
CL column (X) of upper left corner of window
DH row (Y) of lower right corner of window
DL column (X) of lower right corner of window
return none
note 1) Push BP before scrolling, pop after
2) If in CGA text mode, affects current page only
Function 08h Read Character Attribute - of character at current cursor pos.
entry AH 08h
BH display page number - text mode
return AH character attribute - text mode
AL ASCII code of character at current cursor position
Function 09h Write Character and Attribute - at current cursor position
entry AH 09h
AL ASCII code of character to display
BH display page number - text mode
BL attribute/color of character
CX number of characters to write
return none
note 1) CX should not exceed actual rows availible, or results may be erratic
2) Setting CX to zero will cause runaway
3) All values of AL result in some sort of display; the various control
characters are not recognized as special and do not change the current
cursor position
4) Does not change cursor position when called - the cursor must be
advanced with int 10 function 0Ah.
5) If used to write characters in graphics mode with bit 7 of AH set to 1
the character will by XORed with the current display contents.
6) In graphics mode the bit patterns for ASCII character codes 80h-0FFh
are obtained from a table. On the standard PC and AT, the location is at
interrupt vector 01Fh (0000:007C). For ASCII characters 00h-07Fh, the
table is at an address in ROM. On the PCjr the table is at interrupt
vector 44h (0000:00110) and is in addressable RAM (may be replaced by
the user)
7) All characters are displayed, including CR, LF, and BS
Function 0Ah Write Character - display character(s) (use current attribute)
entry AH 0Ah
AL ASCII code of character to display
BH display page - text mode
BL color of character (graphics mode, PCjr only)
CX number of times to write character
return none
note 1) CX should not exceed actual rows availible, or results may be erratic
2) All values of AL result in some sort of display; the various control
characters are not recognized as special and do not change the current
cursor position
3) If used to write characters in graphics mode with bit 7 of AH set to 1
the character will by XORed with the current display contents.
4) In graphics mode the bit patterns for ASCII character codes 80h-0FFh
are obtained from a table. On the standard PC and AT, the location is at
interrupt vector 01Fh (0000:007C). For ASCII characters 00h-07Fh, the
table is at an address in ROM. On the PCjr the table is at interrupt
vector 44h (0000:00110) and is in addressable RAM (may be replaced by
the user)
5) In EGA in graphics modes, replication count in CX works correctly only
if all characters written are contained on the same row
6) All characters are displayed, including CR, LF, and BS
Function 0Bh Set Color Palette - set palette for graphics or text border
entry AH 0Bh
BH 00h select border (text mode)
BL color 0-15, 16-31 for high-intensity characters
BH 01h set graphics palette with value in BL
(CGA) BL 0 green/red/yellow
1 cyan/magenta/white
(EGA) (graphics modes)
BH 0
BL has border color (0-15) & high intensity bkgr'd color (16-31)
BH 1
BL contains palette being selected (0-1)
return none
note 1) Valid in CGA mode 04h, PCjr modes 06h, 08h-0Ah
2) Although the registers in the MCGA may be set as if to change the
border, the MCGA will not display a border no matter what register
settings are used.
Function 0Ch Write Dot - plot one graphics pixel
entry AH 0Ch
AL dot color code (0/1 in mode 6, 0-3 in modes 4 and 5)
(set bit 7 to XOR the dot with current color)
0-3 mode 04h, 05h
0-1 mode 06h
BH page number (ignored if adapter supports only one page)
CX column (X=0000h - 027Fh)
(0 - 319 in modes 4,5,13, 0 - 639 in modes 6,14,15,16)
DX row (Y=0000h - 00C7h) (0 - 199 CGA)
return none
note Video graphics modes 4-6 only
Function 0Dh Read Dot - determine the color of one graphics pixel
entry AH 0Dh
CX column (X=0000h - 027Fh) (0-319 or 639)
DX row (Y=0000h - 00C7h) (0-199)
return AL color of dot
note Only valid in graphics mode
Function 0Eh Write TTY - write one character and update cursor. Also handles
CR (0Dh), beep (07h), backspace (10h), and scrolling
entry AH 0Eh
AL ASCII code of character to be written
BH page number (text)
BL foreground color (video modes 6 & 7 only) (graphics)
return none
note 1) The ASCII codes for bell, backspace, carriage return, and linefeed are
recognized and appropriate action taken. All other characters are
written to the screen and the cursor is advanced to the next position
2) Text can be written to any CGA page regardless of current active page
3) Automatic linewrap and scrolling are provided through this function
4) This is the function used by the DOS CON console driver.
5) This function does not explicitly allow the use of attributes to the
characters written. Attributes may be provided by first writing an ASCII
27h (blank) with the desired attributes using function 09h, then
overwriting with the actual character using this function. While clumsy
this allows use of the linewrap and scrolling services provided by
this function
Function 0Fh Return Current Video State - mode and size of the screen
entry AH 0Fh
return AH number of character columns on screen
AL mode currently set (see AH=00h for display mode codes)
BH current active display page
note If mode was set with bit 7 set ("no blanking"), the returned mode will
also have bit 7 set
Function 10h Set Palette Registers (PCjr, Tandy 1000, EGA, MCGA, VGA)
entry AH 10h
AL 00h set individual palette register
BH color value to store
BL palette register to set
(on MCGA, only BX = 0712h is supported)
01h set border color palette register
BH color value to store
02h set all palette registers and overscan
ES:DX pointer to 17-byte list
bytes 0-15 values for palette regs. 0-15
byte 16 value for border color register
03h toggle blink/intensity bit (Jr, EGA, MCGA, VGA)
BL 00h enable intensity
01h enable blink
04h unknown
05h unknown
06h unknown
07h read individual palette register (VGA)
BL palette register number
return BH palette register value
08h read overscan (order color) register (VGA)
return BH value
09h read all palette registers and overscan register (VGA)
ES:DX pointer to buffer address (17 bytes)
10h set individual video DAC color register (MCGA, VGA)
BX register number
CH new value for green (0-63)
CL new value for blue (0-63)
DH new value for red (0-63)
11h unknown
12h set block of video DAC color registers (MCGA, VGA)
BX starting color register
CX number of registers to set
ES:DX table of 3*CX bytes where each 3 byte group
represents one byte each of red, green and
blue (0-63)
13h set video DAC color page (VGA)
BH 00h select 4 blocks of 64
BH 01h select 16 blocks of 16
BL 00h select paging mode
BL 01h select Page
BH page number (00h to 03h) or (00h to 0Fh)
(not valid in mode 13h)
14h unknown
15h read individual video DAC color register (MCGA, VGA)
BL palette register number
return DH red value
CH green value
CL blue value
16h unknown
17h read block of video DAC color registers (MCGA, VGA)
BX starting palette register
CX number of palette registers to read
ES:DX buffer (3 * CX bytes in size)
return CX number of red, green and blue triples in buffer
18h *UNDOCUMENTED* set PEL mask
BL new PEL value
19h *UNDOCUMENTED* read PEL mask
BL value read
1Ah read video DAC color-page state (VGA)
return BL paging mode
0 four pages of 64
1 sixteen pages of 16
BH current page
1Bh perform gray-scale summing (MCGA, VGA)
BX starting palette register
CX number of registers to convert
BH color value
BL if AL=00h palette register to set (00h-0Fh)
if AL=03h 0 to enable intensity
1 to enable blinking
ES:DX if AL=02h pointer to 16-byte table of register values
followed by the overscan value:
bytes 0-15 values for palette registers 0-15
byte 16 value for border register
return none
note DAC is Digital to Analog Convertor circuit in MCGA/VGA chips
Function 11h Character Generator Routine (EGA and after)
entry AH 11h
The following functions will cause a mode set, completely
resetting the video environment, but without clearing the video
buffer.
AL 00h, 10h load user-specified patterns
BH number of bytes per character pattern
BL block to load in map 2
CX count of patterns to store
DX character offset into map 2 block
ES:BP pointer to user table
01h, 11h load ROM monochrome patterns (8 by 14)
BL block to load
02h, 12h load ROM 8 by 8 double-dot patterns
BL block to load
03h set block specifier
BL block specifier
(EGA/MCGA) bits 0,1 = block selected by chars with attribute
bit 3 = 0
bits 2,3 = block selected by chars with attribute
bit 3 = 1
(VGA) bits 0,1,4 = block selected by attribute bit 3 = 0
bits 2,3,5 = block selected by attribute bit 3 = 1
04h,14h load 8x16 text character set (MCGA, VGA)
The routines called with AL=1x are designed to be
called only immediately after a mode set and are
similar to the routines called with AL=0x, except
that:
Page 0 must be active.
Bytes/character is recalculated.
Max character rows is recalculated.
CRT buffer length is recalculated.
CRTC registers are reprogrammed as follows:
reg09h bytes/char-1; max scan line (mode 7 only)
reg0Ah bytes/char-2; cursor start
reg0Bh 0 ; cursor end
reg12h ((rows+1)*(bytes/char))-1
; vertical display end
reg14h bytes/char ; underline loc
(* BUG: should be 1 less *)
The following functions are meant to be called only
after a mode set:
20h user 8 by 8 graphics characters (int 1Fh)
ES:BP pointer to user table
21h user graphics characters
ES:BP pointer to user table
CX bytes per character
BL row specifier
0 user set
DL number of rows
1 14 rows
2 25 rows
3 43 rows
22h ROM 8 by 14 set
BL row specifier
23h ROM 8 by 8 double dot
BL row specifier
24h load 8x16 graphics characters (MCGA, VGA)
BL row specifier
30h Get Font Information (EGA, MCGA, VGA)
BH pointer specifier
0 int 1Fh pointer
1 int 44h pointer
2 ROM 8 by 14 character font pointer
3 ROM 8 by 8 double dot font pointer
4 ROM 8 by 8 DD font (top half)
5 ROM text alternate (9 by 14) pointer
return ES:BP specified pointer value
CX bytes/character
DL character rows on screen
Function 12h Alternate Select (EGA and after)
entry AH 12h
BL 10h return EGA information
return BH 00h if color mode is in effect (3Dx)
01h if mono mode is in effect (3Dx)
BL 00h if 64k EGA memory
01h if 128k EGA memory
02h if 192k EGA memory
03h if 256k EGA memory
CH feature bits
CL switch settings
20h select alternate print screen routine
30h select vertical resolution for text modes (VGA)
AL 00h 200 scan lines
01h 350 scan lines
02h 400 scan lines
return AL 12h if function supported
31h enable/disable default palette loading (MCGA, VGA)
AL 00h enable default palette loading
01h disable default palette loading
return AL 12h if function was supported
32h enable/disable video addressing (MCGA, VGA)
AL 00h enable video
01h disable video
return AL 12h if function was supported
33h enable/disable default gray scale summing (MCGA, VGA)
AL 00h enable gray scale summing
01h disable gray scale summing
return AL 12h if function was supported
34h enable/disable text cursor emulation (VGA)
AL 00h enable cursor emulation
01h disable cursor emulation
return AL 12h if function was supported
35h display-switch interface (PS/2)
AL 00h initial adapter video off
01h initial planar video on
02h switch active video off
03h switch inactive video on
80h *undocumented* set system board video
active flag
ES:DX buffer (128 byte save area if AL = 0, 2 or 3)
return AL 12h if function was supported
36h video refresh control (VGA)
AL 00h enable refresh
01h disable refresh
return AL 12h if function supported
BX 5500h (used by ATI and TAXAN)
BX 5502h (used by ATI and TAXAN)
Function 13h Enhanced String Write (AT, XT/286, PS/2)
entry AH 13h
AL 00h Write String, Don't Move Cursor
01h Write String, Move Cursor
02h Write String of Alternating Characters and Attributes;
Don't Move Cursor
bit 0: set in order to move cursor after write
bit 1: set if string contains alternating chars and
attributes
03h Write String of Alternating Characters and Attributes;
Move Cursor
bit 0: set in order to move cursor after write
bit 1: set if string contains alternating characters
and attributes
BH display page number
BL attribute if AL bit 1 clear
CX length of string
DH row of starting cursor position
DL column of starting cursor position
ES:BP pointer to start of string
return none
note Recognizes CR, LF, BS, and bell
Function 14h Load LCD Character Font (Convertible)
entry AH 14h
AL 00h load user specified font
BH number of bytes per character
BL 00h load main font (block 0)
01h load alternate font (block 1)
CX number of characters to store
DX character offset into RAM font area
ES:DI pointer to character font
AL 01h load system ROM default font
BL 00h load main font (block 0)
01h load alternate font (block 1)
AL 02h set mapping of LCD high intensity attribute
BL 00h ignore high intensity attribute
01h map high intensity to underscore
02h map high intensity to reverse video
03h map high intensity to seleected alternate font
return unknown
Function 15h Return Physical Display Parameters (Convertible)
entry AH 15h
return AX Alternate display adapter type
ES:DI pointer to parameter table:
word # information
01h monitor model number
02h vertical pixels per meter
03h horizontal pixels per meter
04h total number of vertical pixels
05h total number of horizontal pixels
06h horizontal pixel separation in micrometers
07h vertical pixel separation in micrometers
Function 1Ah Display Combination Code (MCGA, VGA)
Using the compatibility BIOS of the PS/2 Models 50, 60, 80 there
is a way to determine which video controller and attached
display are on the system. The Display Combination Code (DCC)
is a Video BIOS function that provides the capability.
entry AH 1Ah
AL 00h read display combination code
01h write display combination code
return AL 1Ah indicates Compatibility BIOS is supported,
any other value is invalid
BH Display Combination Code (DCC)
00h no display
01h IBM monochrome adapter and display
02h IBM color/graphics monitor adapter w/color display
03h reserved
04h IBM EGA, color display
05h IBM EGA, monochrome display
06h IBM PGA, color display
07h VGA, analog monochrome display
08h VGA, analog color display
09h reserved
0Ah MCGA, digital color display
0Bh MCGA, analog monochrome display
0Ch MCGA, analog color display
0FFh unknown display type
BL active display device code
note This function may be used to test for VGA, since it is not supported in
earlier adapters. If AL is still 1Ah when the call completes, a VGA
compatible adapter is present.
Function 1Bh Functionality/State Information (MCGA, VGA)
entry AH 1Bh
BX implementation type
0000h return funtionality/state information
ES:DI pointer to 64 byte buffer
return AL 1Bh if function supported
ES:DI buffer filled
00h address of functionality table
01h unknown
02h unknown
03h unknown
04h current video mode
05h number of columns
06h unknown
07h length of regen buffer in bytes
09h starting address of regen buffer
0Bh cursor position for page 0
0Dh cursor position for page 1
0Fh cursor position for page 2
11h cursor position for page 3
13h cursor position for page 4
15h cursor position for page 5
17h cursor position for page 6
19h cursor position for page 7
1Bh cursor type
1Dh active display page
1Eh CRTC port address
20h current setting of register (3?8)
21h current setting of register (3?9)
22h number of rows
23h bytes/character
25h DCC of active display
26h DCC of alternate display
27h number of colors supported in current mode
29h number of pages supported in current mode
2Ah number of scan lines active
(0,1,2,3) = (200,350,400,480)
2Bh primary character block
2Ch secondary character block
2Dh miscellaneous flags byte
bit 0 all modes on all displays on
1 gray summing on
2 monochrome display attached
3 default palette loading disabled
4 cursor emulation enabled
5 0=intensity; 1=blinking
6 reserved
7 reserved
2Eh to 30h reserved
31h video memory available
00h=64K, 01h=128K, 02h=192K, 03h=256K
32h save pointer state flags byte
bit 0 512 character set active
1 dynamic save area present
2 alphanumeric font override active
3 graphics font override active
4 palette override active
5 DCC override active
6 reserved
7 reserved
33h to 3Fh reserved
note State Functionality Table format (16 bytes)
00h modes supported #1
bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6 supported
01h modes supported #2
bit 0 to bit 7 = 1 modes 8,9,A,B,C,D,E,F supported
02h modes supported #3
bit 0 to bit 3 = 1 modes 10,11,12,13 supported
bit 4 to bit 7 reserved
03h to 06h reserved
07h scan lines supported
bit 0 to bit 2 = 1 if scan lines 200,350,400 supported
08h total number of character blocks available in text modes
09h maximum number of active character blocks in text modes
0Ah miscellaneous function flags #1
bit 0 all modes on all displays function supported
1 gray summing function supported
2 character font loading function supported
3 default palette loading enable/disable supported
4 cursor emulation function supported
5 EGA palette present
6 color palette present
7 color paging function supported
0Bh miscellaneous function flags #2
bit 0 light pen supported
1 save/restore state function 1Ch supported
2 intensity blinking function supported
3 Display Combination Code supported
4-7 reserved
0Ch to 0Dh reserved
0Eh Save pointer function flags
bit 0 512 character set supported
1 dynamic save area supported
2 text font override supported
3 graphics font override supported
4 palette override supported
5 DCC extension supported
6 reserved
7 reserved
0Fh reserved
Function 1Ch Save/Restore Video State (VGA)
entry AH 1Ch
AL 00h return state buffer size
01h save video state
ES:BX buffer address
02h restore video state
ES:BX buffer address of previously saved state
CX requested states
bit 0 video hardware
1 BIOS data areas
2 color registers and DAC state
3-15 reserved
return AL 1Ch if function supported
BX number of 64 byte blocks needed (function 00h)
note VGA only
Function 40h Set Graphics Mode (Hercules Graphics Card Plus)
entry AH 40h
return unknown
Function 41h Set Text Mode (Hercules Graphics Card Plus)
entry AH 41h
return unknown
Function 42h Clear Current Page (Hercules Graphics Card Plus)
entry AH 42h
return unknown
Function 43h Select Drawing Page (Hercules Graphics Card Plus)
entry AH 43h
AL page number (0,1)
return unknown
Function 44h Select Drawing Function (Hercules Graphics Card Plus)
entry AH 44h
AL 0 clear pixels
1 set pixels
2 invert pixels
return unknown
Function 45h Select Page to Display (Hercules Graphics Card Plus)
entry AH 45h
AL page number (0,1)
return unknown
Function 46h Draw One Pixel (Hercules Graphics Card Plus)
entry AH 46h
DI x (0-720)
BP y (0-347)
return unknown
note Function 44h determines operation and function 43h which page to use.
Function 47h Find Pixel Value (Hercules Graphics Card Plus)
entry AH 47h
DI x (0-720)
BP y (0-347)
return AL 0 pixel clear
1 pixel set
note Function 43h specifies page that is used.
Function 48h Move to Point (Hercules Graphics Card Plus)
entry AH 48h
DI x (0-720)
BP y (0-347)
return unknown
Function 49h Draw to Point (Hercules Graphics Card Plus)
entry AH 49h
DI x (0-720)
BP y (0-347)
return unknown
note Function 48h or 49h specify first point, 44h operation and 43h page
to use.
Function 4Ah Block Fill (Hercules Graphics Card Plus)
entry AH 4Ah
return unknown
Function 4Bh Display Character (Hercules Graphics Card Plus)
entry AH 4Bh
AL ASCII code for character to display
DI x (0-720)
BP y (0-347)
return unknown
note Unlike the other BIOS character functions character position is
specified in pixels rather than rows and columns.
Function 4Ch Draw Arc (Hercules Graphics Card Plus)
entry AH 4Ch
return unknown
Function 4Dh Draw Circle (Hercules Graphics Card Plus)
entry AH 4Dh
return unknown
Function 4Eh Fill Area (Hercules Graphics Card Plus)
entry AH 4Eh
return unknown
Function 6Ah Direct Graphics Interface Standard (DGIS)
entry AH 6Ah
AL 00h Inquire Available Devices
BX 0
CX 0
DX buffer length (may be 0)
ES:DI address of buffer
return BX number of bytes stored in buffer
CX bytes req'd for all descriptions (0 if no DGIS)
note Buffer contains descriptions and addresses of DGIS-
compatible display(s) and printer(s)
01h Redirect Character Output
CX 0
ES:DI address of device to send INT 10 output to
return CX 0 output could not be redirected
else INT 10h output now routed to requested display
02h Inquire int 10 Output Device
ES:DI 0:0
return ES:DI 0:0 if current display is non-DGIS
else address of the current DGIS INT 10 display
Function 6Fh Set Video Mode (VEGA Extended EGA/VGA)
entry AH 6F
AL 05h
BL mode| (graphics mode if graphics resolution listed)
| text |pixel| graphic|color|disp|scrn| system
| resol|box |resoltn | |page|addr|
62h 800x600 16 VEGA Extended EGA
65h 1024x768 16 VEGA Extended EGA
66h 640x400 256 VEGA Extended VGA
67h 640x480 256 VEGA Extended VGA
68h 720x540 256 VEGA Extended VGA
69h 800x600 256 VEGA Extended VGA
Function 70h Get Video RAM Address (Tandy 1000)
entry AH 70h
return AX segment addresses of the following
BX offset address of green plane
CX segment address of green plane
DX segment address of red/blue plane
note (red offset = 0, blue offset = 4000)
Function 71h Get INCRAM Addresses (Tandy 1000)
entry AH 71h
return AX segment address of the following
BX segment address of INCRAM
CX offset address of INCRAM
Function 72h Scroll Screen Right (Tandy 1000)
entry AH 72h
AL number of columns blanked at left of page
00h blank window
BH attributes to be used on blank columns
CH,CL row, column address of upper left corner
DH,DL row, column address of lower right corner
Function 73h Scroll Screen Left (Tandy 1000)
entry AH 73h
AL number of columns blanked at right of page
00h blank window
BH attributes to be used on blank columns
CH,CL row, column address of upper left corner
DH,DL row, column address of lower right corner
Function 80h DESQview - Set (something)
entry AH 80h
DX 4456h ('DV')
ES:DI pointer to FAR subroutine to be called on?
return DS segment of DESQview data structure for video buffer
note 1) This function is probably meant for internal use only, due to the magic
value required in DX
2) The subroutine seems to be called when the DESQview menu is accessed
on entry, AL = 03h or 04h
Function 81h DESQview video - Get something?
entry AH 81h
DX 4456h ('DV')
return ES segment of DESQview data structure for video buffer
byte ES:[0] = current window number
note This function is probably meant for internal use only, due to the
magic value required in DX
Function 82h DESQview - Get Current Window Info
entry AH 82h
DX 4456h ('DV')
return AH unknown
AL current window number
BH unknown
BL direct screen writes
0 program does not do direct writes
1 program does direct writes, so shadow buffer not usable
CH unknown
CL current video mode
DS segment in DESQview for data structure
in DV 2.00,
byte DS:[0] = window number
word DS:[1] = segment of other data structure
word DS:[3] = segment of window's object handle
ES segment of DESQview data structure for video buffer
note This function is probably meant for internal use only, due to the magic
value required in DX
Function 0F0h Microsoft Mouse driver EGA support - Read One Register
entry AH 0F0h
BL register number
DX group index
(pointer/data chips)
00h CRT Controller (25 reg) 3B4h mono, 3D4h color
08h sequencer (5 registers) 3C4h
10h graphics controller (9 registers) 3CEh
18h attribute controller (20 registers) 3C0h
(single registers)
20h miscellaneous output register 3C2h
28h feature control register (3BAh mono, 3DAh color
30h graphics 1 position register 3CCh
38h graphics 2 position register 3CAh
return BL data
Function 0F1h Microsoft Mouse driver EGA support - Write One Register
entry AH 0F1h
DX group index (see function F0h)
BL register number
BH value to write
return BL data
Function 0F2h Microsoft Mouse driver EGA support - Read Register Range
entry AH 0F2h
CH starting register number
CL number of registers (>1)
DX group index
00h CRTC (3B4h mono modes, 3D4h color modes)
08h sequencer 3C4h
10h graphics controller 3CEh
18h attribute controller 3C0h
ES:BX pointer to buffer, CL bytes
Function 0F3h Microsoft Mouse driver EGA support - Write Register Range
entry AH 0F3h
CH starting register
CL number of registers (>1)
DX group index
00h CRTC (3B4h mono modes, 3D4h color modes)
08h sequencer 3C4h
10h graphics controller 3CEh
18h attribute controller 3C0h
ES:BX pointer to buffer, CL bytes
Function 0F4h Microsoft Mouse driver EGA support - Read Register Set
entry AH 0F4h
CX number of registers (>1)
ES:BX pointer to table of records in this format:
bytes 1-2 group index
(pointer/data chips)
00h CRTC (3B4h mono modes, 3D4h color modes)
08h sequencer 3C4h
10h graphics controller 3CEh
18h attribute controller 3C0h
(single registers)
20h miscellaneous output register 3C2h
28h feature control register (3BAh mono modes, 3DAh color)
30h graphics 1 position register 3CCh
38h graphics 2 position register 3CAh
byte 3 register number (0 for single registers)
byte 4 register value
Function 0F5h Microsoft Mouse driver EGA support - Read Register Set
entry AH 0F5h
CX number of registers (>1)
ES:BX pointer to table of records in this format:
bytes 1-2 group index
(pointer/data chips)
00h CRTC (3B4h mono modes, 3D4h color modes)
08h sequencer 3C4h
10h graphics controller 3CEh
18h attribute controller 3C0h
(single registers)
20h miscellaneous output register 3C2h
28h feature control register (3BAh mono modes, 3DAh color)
30h graphics 1 position register 3CCh
38h graphics 2 position register 3CAh
byte 3 register number (0 for single registers)
byte 4 register value
Function 0F6h Microsoft Mouse driver EGA support
Revert to Default Registers
entry AH 0F6h
return unknown
Function 0F7h Microsoft Mouse driver EGA support
Define Default Register Table
entry AH 0F7h
DX port number
ES:BX address of table of one byte entries, one byte to be written to
each register
(pointer/data chips)
00h CRTC (3B4h mono modes, 3D4h color modes)
08h sequencer 3C4h
10h graphics controller 3CEh
18h attribute controller 3C0h
(single registers)
20h miscellaneous output register 3C2h
28h feature control register (3BAh mono, 3DAh color)
30h graphics 1 position register 3CCh
38h graphics 2 position register 3CAh
Function 0FAh Microsoft Mouse driver EGA support - Interrogate Driver
entry AH 0FAh
BX 00h
return BX 00h if mouse driver not present
ES:BX pointer to EGA Register Interface version number, if present:
byte 1 major release number
byte 2 minor release number
Function 0FEh Get Alternate Screen Buffer Address (text mode only)
(Topview/DesQview/Taskview)
entry AH 0FEh
ES:DI segment:offset of assumed video buffer
return: ES:DI segment:offset of actual video buffer
note 1) This alternate video buffer can be written to directly, in the same
manner as writing to B:000 or B:800. The MT program will manage the
actual display.
2) There is no need to synchronize vertical retrace when writing to the
alternate buffer; this is managed by the MT program
3) If TopView or DESQview is not running, ES:DI is returned unchanged.
4) TopView requires that function 0FFh be called every time you write into
the buffer to tell TopView that something changed
Function 0FFh Update Real Display (text mode only) (TopView)
Update Video Buffer (Topview/DesQview/Taskview)
entry AH 0FFh
CX number of sequential characters that have been modified
DI offset of first character that has been modified
ES segment of video buffer
return unknown
note 1) DesQview supports this call, but does not require it
2) Avoid CX=0
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 11h Equipment Check │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0044h) fetch a code describing active peripherals.
entry AH 11h
return AX Equipment listing word Bits are:
0 number of floppy drives
0 no drives
1 bootable (IPL) diskette drive installed
1 math chip
0 no math coprocessor (80x87) present
1 math coprocessor (80x87) present
(PS/2) 2 0 mouse not installed
1 mouse installed
(PC) 2,3 system board RAM
0,0 16k (PC-0, PC-1)
1,1 64k (PC-2, XT)
note 1) not commonly used. Set both bits to 1
2) both bits always 1 in AT
4,5 initial video mode
0,0 no video installed (use with dumb terminal)
0,1 40x25 color (CGA)
1,0 80x25 color (CGA, EGA, PGA, MCGA, VGA)
1,1 80x25 monochrome (MDA or Hercules, most super-
hires mono systems)
6,7 number of diskette drives (only if bit 0 1)
0,0 1 drives
0,1 2 drives
1,0 3 drives
1,1 4 drives
8 0 DMA present
1 no DMA (PCjr, some Tandy 1000s, 1400LT)
9,A,B number of RS232 serial ports (0-3)
0,0,0 none
0,0,1 1
0,1,0 2
0,1,1 3
1,0,0 4
C 0 no game I/O attached
1 game I/O attached (default for PCjr)
D serial accessory installation
0 no serial accessories installed
1 Convertible - internal modem installed
1 PCjr - serial printer attached
E,F number of parallel printers
0,0 none
0,1 one (LPT1, PRN)
1,0 two (LPT2)
1,1 three (LPT3)
note Models before PS/2 would allow a fourth
parallel printer. Remapping of the BIOS in the
PS/2s does not allow the use of LPT4.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 12h Memory Size │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0048h) get system memory
return AX number of contiguous 1K RAM blocks
note 1) This service does not depend on the setting of the motherboard switches
2) This is the same value stored in absolute address 04:13h
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 13h Disk I/O - access the disk drives (floppy and hard disk) │
└─────────────────────────────────────────────────────────────────────────────┘
(0:004Ch) does not try rereading disk if an error is returned
Function 00h Reset - reset the disk controller chip
entry AH 00h
DL drive (if bit 7 is set both hard disks and floppy disks reset)
return AH status
note 1) Forces controller chip to recalibrate read/write heads
2) Some systems (Sanyo 55x) this resets all drives
Function 01h Get Status of disk system
entry AH 01h
DL drive (hard disk if bit 7 set)
return AL status of most recent operation
00h successful completion
01h bad command
02h address mark not found
03h tried to write on write-protected disk
04h sector not found
05h reset failed (hard disk)
06h diskette removed or changed
07h bad parameter table (hard disk)
08h DMA overrun
09h attempt to DMA across 64K boundary
0Ah bad sector detected (hard disk)
0Bh bad track detected (hard disk)
0Ch unsupported track
0Dh invalid number of sectors on format (hard disk)
0Eh control data address mark detected (hard disk)
0Fh DMA arbitration error (hard disk)
10h bad CRC/EEC on read
11h data ECC corrected
20h controller failure
40h seek failed
80h timeout
0AAh drive not ready (hard disk)
0BBh undefined error (hard disk)
0CCh write fault (hard disk)
0E0h status error (hard disk)
0FFh sense operation failed (hard disk)
Function 02h Read Sectors - read one or more sectors from diskette
entry AH 02h
AL number of sectors to read
BX address of buffer (ES=segment)
CH track number (0-39 or 0-79 for floppies)
(for hard disk, bits 8,9 in high bits of CL)
CL sector number (1 to 18, not value checked)
DH head number (0 or 1)
DL drive (0=A, 1=B, etc.) (bit 7=0) (drive 0-7)
ES:BX address to store/fetch data (buffer to fill)
[0000:0078] dword pointer to diskette parms
return CF clear (0) for successful
set (1) failure
AH status (00h, 02h, 03h, 04h, 08h, 09h, 10h, 0Ah, 20h,
40h, 80h)
AL number of sectors transferred
note 1) Number of sectors begins with 1, not 0
2) Trying to read zero sectors is considered a programming error; results
are not defined
Function 03h Write Sectors - write from memory to disk
entry AH 03h
AL number of sectors to write (1-8)
CH track number (for hard disk, bits 8,9 in high bits of CL)
CL beginning sector number
(if hard disk, high two bits are high bits of track #)
DH head number
DL drive number (0-7)
ES:BX address of buffer for data
return CF set if error
AH status (see above)
AL number of sectors written
note 1) Number of sectors begins with 1, not 0
2) Trying to write zero sectors is considered a programming error; results
are not defined
Function 04h Verify - verify that a write operation was successful
entry AH 04h
AL number of sectors to verify (1-8)
CH track number (for hard disk, bits 8,9 in high bits of CL)
CL beginning sector number
DH head number
DL drive number (0-7)
return CF set on error
AH status (see above)
AL number of sectors verified
Function 05h Format Track - write sector ID bytes for 1 track
entry AH 05h
AL number of sectors to create on this track
CH track (or cylinder) number
CL sector number
DH head number (0, 1)
DL drive number (0-3)
ES:BX pointer to 4-byte address field (C-H-R-N)
byte 1 = (C) cylinder or track
byte 2 = (H) head
byte 3 = (R) sector
byte 4 = (N) bytes/sector (0 = 128, 1 = 256, 2 = 512, 3 = 1024)
return CF set if error occurred
AH status code (see above)
note Not valid for ESDI hard disks on PS/2
Function 06h Hard Disk - format track and set bad sector flags
(PC2, PC-XT, and Portable)
entry AH 06h
AL interleave value (XT only)
CH cylinder number (bits 8,9 in high bits of CL)
CL sector number
DH head
DL drive
ES:BX 512 byte format buffer
the first 2*(sectors/track) bytes contain f,n for each sector
f 00Fh for good sector
80h for bad sector
n sector number
return AH status code
Function 07h Hard Disk - format the drive starting at the desired track
(PC2, PC-XT and Portable)
entry AH 07h
AL interleave value (XT only) (01h-10h)
CH cylinder number (bits 8,9 in high bits of CL) (00h-03FFh)
CL sector number
DH head number (0-7)
DL drive number (80h-87h, 80h=C, 81h=D,...)
ES:BX format buffer, size = 512 bytes
the first 2*(sectors/track) bytes contain f,n for each sector
f=00h for good sector
80h for bad sector
n=sector number
return AH status code (see above)
note Award AT BIOS routines are extended to handle more than 1024 cylinders.
AL number of sectors
CH cylinder numberm low 8 bits
CL sector number bits 0-5, bits 6-7 are high 2 cylinder bits
DH head number (bits 0-5) bits 6-7 are extended high cyls (>1024)
DL drive number (0-1 for diskette, 80h-81h for hard disk)
ES:BX transfer address
Function 08h Read Drive Parameters (XT, CONV, AT, XT/286, PS/2)
entry AH 08h
DL drive number (0-2)
return CF set on error
AH status code (see above)
BL drive type (see AH=17h below) (AT/PS2 floppies only)
CH maximum useable value for cylinder number
CL maximum useable value for sector number or cylinder number
DH maximum usable value for head number
DL number of consecutive acknowledging drives (0-2)
ES:DI drive parameter table
Function 09h Initialize Two Fixed Disk Base Tables (XT, AT, XT/286, PS/2)
(install nonstandard drive)
entry AH 09h
return CF set on error
AH status code (see above)
data block definitions:
+0 maximum number of cylinders (dw)
+2 maximum number of heads (db)
+3 starting reduced write current cylinder (dw - XT only)
+5 starting write precomp cylinder (dw)
+7 maximum ECC data burst length (db - XT only)
+8 control byte: Bits
0,1,2 ─ drive option
3,4,5 - always zero
6 - disable ECC retries
7 - disable access retries
note 1) Int 41h points to table for drive 0
2) Int 46h points to table for drive 1
3) 41h used by XT, 41h and 46h used by AT
Function 0Ah Read Long (Hard disk) (XT, AT, XT/286, PS/2)
entry AH 0Ah
CH cylinder number (bits 8,9 in high bits of CL)
CL sector number
DL drive ID
DH head number
ES:BX pointer to buffer to fill
return CF set on error
AH status code (see above)
AL number of sectors actually transferred
note 1) A "long" sector includes a 4 byte EEC (Extended Error Correction) code
2) Used for diagnostics only on PS/2 systems
Function 0Bh Write Long (XT, AT, XT/286, PS/2)
entry AH 0Bh
CH cylinder (bits 8,9 in high bits of CL)
CL sector number
DH head number
DL drive ID
ES:BX pointer to buffer containing data
return CF set on error
AH status code (see above)
AL number of sectors actually transferred
note 1) A "long" sector includes a 4 byte EEC (Extended Error Correction) code
2) Used for diagnostics only on PS/2 systems
Function 0Ch Seek To Cylinder (except PC, PCjr)
entry AH 0Ch
CH cylinder number (bits 8,9 in high bits of CL)
DH head number
DL drive ID
return CF set on error
AH status code (see above)
note 1) Positions heads over a particular cylinder
Function 0Dh Alternate Disk Reset (except PC, PCjr)
entry AH 0Dh
DL drive ID
return CF set on error
AH status code (see above)
note Not for PS/2 ESDI hard disks
Function 0Eh Read Sector Buffer (XT, Portable PS/2)
entry AH 0Eh
AL number of sectors
CH cylinder (bits 8,9 in top two bits of CL)
CL sector number
DH head number
DL drive number
ES:BX pointer to buffer
return CF set on error
AH status code (see above)
AL number of sectors actually transferred
note 1) Transfers controller's sector buffer. No data is read from the drive
2) Used for diagnostics only on PS/2 systems
Function 0Fh Write sector buffer (XT, Portable)
entry AH 0Fh
AL number of sectors
CH cylinder (bits 8,9 in top two bits of CL)
CL sector number
DH head number
DL drive number
ES:BX pointer to buffer
return CF set if error
AH status code
AL number of sectors actually transferred
note 1) Should be called before formatting to initialize the controller's
sector buffer.
2) Used for diagnostics only on PS/2 systems
Function 10h Test For Drive Ready
entry AH 10h
DL drive ID
return CF set on error
AH status code (see above)
Function 11h Recalibrate Drive
entry AH 11h
DL drive ID
return CF set on error
AH status code (see above)
Function 12h Controller RAM Diagnostic (XT, Portable, PS/2)
entry AH 12h
return CF set on error
AH status code (see AH=1 above)
note Used for diagnostics only on PS/2 systems
Function 13h Drive Diagnostic (XT, Portable)
entry AH 13h
return CF set on error
AH status code (see above)
note Used for diagnostics only on PS/2 systems
Function 14h Controller Internal Diagnostic (AT, XT/286)
entry AH 14h
return CF set on error
AH status code (see above)
note 1) OEM is Western Digital 1003-WA2 hard/floppy combination controller
in AT and XT/286.
2) Used for diagnostics only in PS/2 systems
Function 15h Get Disk Type (except PC and XT)
entry AH 15h
DL drive ID
return AH disk type
00h no drive is present
01h diskette, no change detection present
02h diskette, change detection present
03h fixed disk
CX:DX number of 512-byte sectors when AH = 03h
Function 16h Change of Disk Status (diskette) (except PC and XT)
entry AH 16h
return AH disk change status
00h no disk change
01h disk changed
DL drive that had disk change
Function 17h Set Disk Type for Format (diskette) (except PC and XT)
entry AH 17h
AL 00h no disk
01h 360kb diskette in 360Kb drive
02h 360kb diskette in 1.2M drive
03h 1.2M diskette in 1.2M drive
04h 720kb diskette in 720Kb drive
DL drive number
return AH status of operation
note This function is probably enhanced for the PS/2 series to detect
1.44 in 1.44 and 720k in 1.44.
Function 18h Set Media Type For Format (diskette) (AT, XT/286, PS/2)
entry AH 18h
CH lower 8 bits of number of tracks
CL high 2 bits of number of tracks (6,7) sectors per track
(bits 0-5)
DL drive number
return AH 00h if requested combination supported
01h if function not available
0Ch if not suppported or drive type unknown
80h if there is no media in the drive
ES:DI pointer to 11-byte parameter table
Function 19h Park Hard Disk Heads (XT/286, PS/2)
entry AH 19h
DL drive
return CF set on error
AH error code
Function 1Ah ESDI Hard Disk - Format (PS/2)
entry AH 1Ah
AL defect table count
CL format modifiers
bits 0 ignore primary defect map
1 ignore secondary defect map
2 update secondary defect map
3 perform surface analysis
4 generate periodic interrupt
DL drive
ES:BX pointer to defect table
return CF set on error
AH status (see AH=1 above)
note If periodic interrupt selected, int 15h/AH=0Fh is called after each
cylinder is formatted
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 14h Initialize and Access Serial Port For Int 14 │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0050h) the following status is defined:
serial status byte:
bits 0 delta clear to send
1 delta data set ready
2 trailing edge ring detector
3 delta receive line signal detect
4 clear to send
5 data set ready
6 ring indicator
7 receive line signal detect
line status byte:
bits 0 data ready
1 overrun error
2 parity error
3 framing error
4 break detect
5 transmit holding register empty
6 transmit shift register empty
7 time out note: if bit 7 set then other bits are invalid
All routines have AH=function number and DX=RS232 card number (0 based).
AL=character to send or received character on exit, unless otherwise noted.
entry AH 00h Initialize And Access Serial Communications Port
bit pattern: BBBPPSLL
BBB = baud rate: 110,150,300,600,1200,2400,4800,9600
PP = parity: 01 = odd, 11 = even
S = stop bits: 0 = 1, 1 = 2
LL = word length: 10 = 7-bits, 11 = 8-bits
AL parms for initialization:
bit pattern:
0 word length
1 word length
2 stop bits
3 parity
4 parity
5 baud rate
6 baud rate
7 baud rate
word length 10 7 bits
11 8 bits
stop bits 0 1 stop bit
1 2 stop bits
parity 00 none
01 odd
11 even
baud rate 000 110 baud
001 150 baud
010 300 baud
011 600 baud
100 1200 baud
101 2400 baud
110 4800 baud
111 9600 baud (4800 on PCjr)
DX port number
return AH line status
AL modem status
Function 01h Send Character in AL to Comm Port DX (0 or 1)
entry AH 01h
AL character
DX port number (0 or 1)
return AH RS232 status code
bit 0 data ready
1 overrun error
2 parity error
3 framing error
4 break detected
5 transmission buffer register empty
6 transmission shift register empty
7 timeout
AL modem status
bit
0 delta clear-to-send
1 delta data-set-ready
2 trailing edge ring detected
3 change, receive line signal detected
4 clear-to-send
5 data-set-ready
6 ring received
7 receive line signal detected
Function 02h Wait For A Character From Comm Port DX
entry AH 02h
return AL character received
AH error code (see above)(00h for no error)
Function 03h Fetch the Status of Comm Port DX (0 or 1)
entry AH 03h
return AH set bits (01h) indicate comm-line status
bit 7 timeout
bit 6 empty transmit shift register
bit 5 empty transmit holding register
bit 4 break detected ("long-space")
bit 3 framing error
bit 2 parity error
bit 1 overrun error
bit 0 data ready
AL set bits indicate modem status
bit 7 received line signal detect
bit 6 ring indicator
bit 5 data set ready
bit 4 clear to send
bit 3 delta receive line signal detect
bit 2 trailing edge ring detector
bit 1 delta data set ready
bit 0 delta clear to send
Function 04h Extended Initialize (PC Convertible)
entry AH 04h
AL break status
01h if break
00h if no break
BH parity
00h no parity
01h odd parity
02h even parity
03h stick parity odd
04h stick parity even
BL number of stop bits
00h one stop bit
01h 2 stop bits (1½ if 5 bit word length)
CH word length
00h 5 bits
01h 6 bits
02h 7 bits
03h 8 bits
CL baud rate
00h 110
01h 150
02h 300
03h 600
04h 1200
05h 2400
06h 4800
07h 9600
08h 19200
return AL modem status
AH line control status
Function 05h Extended Communication Port Control (PS/2)
entry AH 05h
AL 00h read modem control register
return BL modem control reg (see AL=1)
AL 01h write modem control register
BL modem control register: (for AL=00 and AL=01) bits
0 data terminal ready
1 request to send
2 out1
3 out2
4 loop
5,6,7 reserved
return AH status
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 15h Cassette I/O │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0054h) Renamed "System Services" on PS/2 line
Function 00h Turn Cassette Motor On (PC, PCjr only)
entry AH 00h
return AH 86h no cassette present
CF set on error
AH error code
00h no errors
01h CRC error
02h bad tape signals
no data transitions (PCjr)
03h no data found on tape
not used (PCjr)
04h no data
no leader (PCjr)
80h invalid command
86h no cassette present
not valid in PCjr
note NOP for systems where cassette not supported
Function 01h Turn Cassette Motor Off (PC, PCjr only)
entry AH 01h
return AH 86h no cassette present
CF set on error
AH error code
note NOP for systems where cassette not supported
Function 02h Read Blocks From Cassette (PC, PCjr only)
entry AH 02h
CX count of bytes to read
ES:BX pointer to data buffer
return CF set on error
AH error code
DX count of bytes actually read
ES:BX pointer past last byte written
note 1) NOP for systems where cassette not supported
2) Cassette operations normally read 256 byte blocks
Function 03h Write Data Blocks to Cassette (PC, PCjr only)
entry AH 03h
CX count of bytes to write
ES:BX pointer to data buffer
return CF set on error
AH error code (see 02h)
CX 0
ES:BX pointer to last byte written+1
note 1) NOP for systems where cassette not supported
2) The last block is padded to 256 bytes with zeroes if needed
3) No errors are returned by this service
Function 0Fh ESDI Format Unit Periodic Interrupt (PS/2 50, 60, 80)
entry AH 0Fh
AL phase code
00h reserved
01h surface analysis
02h formatting
return CF clear if formatting should continue
set if it should terminate
note Called during ESDI drive formatting after each cylinder is completed
Function 10h TopView API Function Calls (TopView)
entry AH 00h PAUSE Give Up CPU Time
return 00h after other processes run
01h GETMEM allocate "system" memory
BX number of bytes to allocate
return ES:DI pointer to block of memory
02h PUTMEM deallocate "system" memory
ES:DI pointer to previously allocated block
return block freed
03h PRINTC display character/attribute on screen
BH attribute
BL character
DX segment of object handle for window
note BX=0 does not display anything, it only
positions the hardware cursor
10h unknown
AL 04h thru 12h
return TopView - unimplemented in DV 2.0x
pops up "Programming error" window in DV 2.0x
11h unknown
12h unknown
13h GETBIT define a 2nd-level interrupt handler
ES:DI pointer to FAR service routine
return BX bit mask indicating which bit was
allocated
0 if no more bits available
14h FREEBIT undefine a 2nd-level interrupt handler
BX bit mask from int 15/AH 13h
15h SETBIT schedule one or more 2nd-level interrupts
BX bit mask for interrupts to post
return indicated routines will be called at next ???
16h ISOBJ verify object handle
ES:DI possible object handle
return BX -1 if ES:DI is a valid object handle
0 if ES:DI is not
17h TopView - unimplemented in DV 2.00
return pops up "Programming Error" window in DV 2.00
18h LOCATE Find Window at a Given Screen Location
BH column
BL row
ES segment of object handle for ?
(0 = use default)
return ES segment of object handle for window
which is visible at the indicated
position
19h SOUND Make Tone
BX frequency in Hertz
CX duration in clock ticks (18.2 ticks/sec)
return immediately, tone continues to completion
note If another tone is already playing, the new tone
does not start until completion of the previous
one. In DV 2.00, it is possible to enqueue
about 32 tones before the process is blocked
until a note completes.
In DV 2.00, the lowest tone allowed is 20 Hz
1Ah OSTACK Switch to Task's Internal Stack
return stack switched
1Bh BEGINC Begin Critical Region
return task-switching temporarily disabled
note Will not task-switch until END CRITICAL REGION
(AH=1Ch) is called
1Ch ENDC End Critical Region
return task-switching enabled
1Dh STOP STOP TASK
ES segment of object handle for task to be stopped
(= handle of main window for that task)
return indicated task will no longer get CPU time
note At least in DV 2.00, this function is ignored
unless the indicated task is the current task.
1Eh START Start Task
ES segment of object handle for task to be started
(== handle of main window for that task)
return Indicated task is started up again
1Fh DISPEROR Pop-Up Error Window
BX bit fields:
0-12 number of characters to display
13,14 which mouse button may be pressed to
remove window
00 either
01 left
10 right
11 either
15 beep if 1
DS:DI pointer to text of message
CH width of error window (0 = default)
CL height of error window (0 = default)
DX segment of object handle
return BX status:
1 left button pressed
2 right button pressed
27 ESC key pressed
note Window remains on-screen until ESC or indicated
mouse button is pressed
20h TopView - unimplemented in DV 2.0x
return pops up "Programming Error" window in DV 2.0x
21h PGMINT Interrupt Another Task
BX segment of object handle for task to interrupt
DX:CX address of FAR routine to jump to next time
task is run
return nothing?
note The current ES, DS, SI, DI, and BP are passed
to the FAR routine
22h GETVER Get Version
BX 00h
return BX nonzero, TopView or compatible loaded
BH minor version
BL major version
notes TaskView returns BX = 0001h
DESQview 2.0 returns BX = 0A01h
23h POSWIN Position Window
BX segment of object handle for parent window
within which to position the window (0 = full
screen)
CH # columns to offset from position in DL
CL # rows to offset from position in DL
DL bit flags
0,1 horizontal position
00 current
01 center
10 left
11 right
2,3 vertical position
00 current
01 center
10 top
11 bottom
4 don't redraw screen if set
5-7 not used
ES segment of object handle for window to be
positioned
return nothing
24h GETBUF Get Virtual Screen Information
BX segment of object handle for window (0=default)
return CX size of virtual screen in bytes
DL 0 or 1, unknown
ES:DI address of virtual screen
25h USTACK Switch Back to User's Stack
return stack switched back
note Call only after int 15h,fn1Ah
26h-2Ah DesQview (TopView?) - unimplemented in DV 2.0x
return pops up "Programming Error" window in DV 2.0x
2Bh POSTTASK Awaken Task DesQview 2.0 (TopView?)
BX segment of object handle for task
return nothing
2Ch Start New Application in New Process
DesQview 2.0 (TopView?)
ES:DI pointer to contents of .PIF/.DVP file
BX size of .PIF/.DVP info
return BX segment of object handle for new task
2Dh Keyboard Mouse Control DesQview 2.0
BL subfunction
00h determine whether using keyboard mouse
01h turn keyboard mouse on
02h turn keyboard mouse off
return (calling BL was 00h)
BL 0 using real mouse
1 using keyboard mouse
Function 11h Topview commands
entry AH 11h
AL various
note In DesQview 2.0x, these function calls are identical to AH=0DEh, so
see those below
Function 20h PRINT.COM (DOS internal) (AT, XT-286, PS/2 50+)
entry AH 20h
AL subfunction
00h unknown (PRINT)
01h unknown (PRINT)
10h sets up SysReq routine on AT, XT/286, PS/2
11h completion of SysReq routine (software only)
note 1) AL=0 or 1 sets or resets some flags which affect what PRINT does when
it tries to access the disk
Function 21h Power-On Self Test (POST) Error Log (PS/2 50+)
entry AH 21h
AL 00h read POST log
01h write POST log
BH device ID
BL error code
return CF set on error
AH status
00h OK
BX number of error codes stored
ES:DI pointer to error log
01h list full
80h invalid command
86h unsupported
note The log is a series of words, the first byte of which identifies the
error code and the second the device.
Function 40h Read/Modify Profiles (Convertible)
entry AH 40h
AL 00h read system profile in CX,BX
01h write system profile from CX, BX
02h read internal modem profile in BX
03h write internal modem profile from BX
BX profile info
return BX internal modem profile (from 02h)
CX,BX system profile (from 00h)
Function 41h Wait On External Event (Convertible)
entry AH 41h
AL condition type
bits 0-2: condition to wait for
0 any external event
1 compare and return if equal
2 compare and return if not equal
3 test and return if not zero
4 test and return if zero
bit 3: reserved
bit 4: 1=port address, 0=user byte
bits 5-7: reserved
BH condition compare or mask value
condition codes:
0 any external event
1 compare and return if equal
2 compare and return if not equal
3 test and return if not zero
4 test and return if zero
BL timeout value times 55 milliseconds
0 if no time limit
DX I/O port address (if AL bit 4 = 1)
ES:DI pointer to user byte (if AL bit 4 = 0)
Function 42h Request System Power Off (Convertible)
entry AH 42h
AL 00h to use system profile
01h to force suspend regardless of profile
Function 43h Read System Status (Convertible)
entry AH 43h
return AL status bits:
0 LCD detached
1 reserved
2 RS232/parallel powered on
3 internal modem powered on
4 power activated by alarm
5 standby power lost
6 external power in use
7 battery low
Function 44h (De)activate Internal Modem Power (Convertible)
entry AH 44h
AL 00h to power off
01h to power on
Function 4Fh Keyboard Intercept (except PC, PCjr, and XT)
entry AH 4Fh
AL scan code, CF set
return AL scan code, CF set if processing desired
note Called by int 9 handler to translate scan codes
Function 80h Device Open (AT, XT/286, PS/2)
entry AH 80h
BX device ID
CX process ID
return CF set on error
AH status
Function 81h Device Close (AT, XT/286, PS/2)
entry AH 81h
BX device ID
CX process ID
return CF set on error
AH status
Function 82h Program Termination (AT, XT/286, PS/2)
AH 82h
BX device ID
return: CF set on error
AH status
note Closes all devices opened with function 80h
Function 83h Event Wait (AT, XT/286, Convertible, PS/2)
entry AH 83h
AL 00h to set interval
10h to cancel
CX,DX number of microseconds to wait (granularity is 976 microseconds)
ES:BX pointer to memory flag (bit 7 is set when interval expires)
(pointer is to caller's memory)
return CF set (1) if function already busy
Function 84h Read Joystick Input Settings (AT, XT/286, PS/2)
entry AH 84h
DX 00h to read the current switch settings (return in AL)
01h to read the resistive inputs
return AX A(X) value
BX A(Y) value
CX B(X) value
DX B(Y) value
AL switch settings (bits 7-4)
Function 85h System Request (SysReq) Key Pressed (except PC, PCjr, XT)
entry AH 85h
return AL 00h key pressed
01h key released
note Called by keyboard decode routine
Function 86h Elapsed Time Wait (except PC, PCjr, XT)
AH 86h
CX,DX number of microseconds to wait
return CF clear after wait elapses
CF set immediately due to error
note Only accurate to 977 microseconds
Function 87h Extended Memory Block Move (286/386 machines only)
AH 87h
CX number of words to move
ES:SI pointer to Global Descriptor Table (GDT)
offset 00h null descriptor
08h uninitialized, will be made into GDT descriptor
10h descriptor for source of move
18h descriptor for destination of move
20h uninitialized, used by BIOS
28h uninitialized, will be made into SS descriptor
return CF set on error
AH status
00h source copied into destination
01h parity error
02h interrupt error
03h address line 20 gating failed
Function 88h Extended Memory Size Determine (AT, XT/286, PS/2)
entry AH 88h
return AX # of contiguous 1K blocks of memory starting at address 1024k
Function 89h Switch Processor to Protected Mode (AT, XT/286, PS/2)
entry AH 89h
BH interrupt number of IRQ 8 (IRQ 9Fh use next 7 interrupts)
BL interrupt number of IRQ 0 (IRQ 17h use next 7 interrupts)
CX offset into protected mode CS to jump to
DS:SI pointer to Global Descriptor Table for protected mode
offset 00h null descriptor
08h GDT descriptor
10h IDT descriptor
18h DS
20h ES
28h SS
30h CS
38h uninitialized, used to build descriptor for
BIOS CS
return AH 0FFh error enabling address line 20
CF set on error
Function 90h Device Busy Loop (except PC, PCjr, XT)
entry AH 90h
AL type code:
00h disk
01h diskette
02h keyboard
03h PS/2 pointing device
80h network (ES:BX = pointer to network control block)
0FCh hard disk reset (PS/2)
0FDh diskette motor start
0FEh printer
ES:BX pointer to request block for type codes 80h through 0BFh
return CF 1 (set) if wait time satisfied
0 (clear) if driver must perform wait
note Used by NETBIOS
Type codes are allocated as follows:
00h-7Fh non-reentrant devices; OS must arbitrate access
80h-BFh reentrant devices; ES:BX points to a unique control block
C0h-FFh wait-only calls, no complementary int 15, fn91h call
Function 91h Set Flag and Complete Interrupt (except PC, PCjr, XT)
entry AH 91h
AL type code (see AH=90h above)
ES:BX pointer to request block for type codes 80h through 0BFh
return AH 0
note Used by NETBIOS
Function 0C0h Get System Configuration (XT after 1/10/86, PC Convertible,
XT/286, AT, PS/2)
entry AH 0C0h
return CF 1 if BIOS doesn't support call
ES:BX pointer to ROM system descriptor table
dword number of bytes in the following table (norm. 16 bytes)
byte system ID byte; see Chapter 2 for interpretation
byte secondary ID distingushes between AT and XT/286, etc.
byte BIOS revision level, 0 for 1st release, 1 for 2nd, etc.
byte feature information
80h DMA channel 3 used by hard disk BIOS
40h 2nd 8259 installed
20h realtime clock installed
10h int 15h, fn 04h called upon int 09h
08h wait for external event supported (int 15fn41)
used on Convertible; reserved on PS/2 systems
04h extended BIOS area allocated at 640k
03h reserved
02h bus is Micro Channel instead of PC
01h reserved
00h reserved
byte unknown (set to 0) (reserved by IBM)
byte unknown (set to 0) (reserved by IBM)
byte unknown (set to 0)
byte unknown (set to 0) (Award copyright here)
note 1) Int 15h is also used for the Multitask Hook on PS/2 machines. No
register settings availible yet.
2) The 1/10/86 XT BIOS returns an incorrect value for the feature byte.
Function 0C1h System - Return Extended-BIOS Data-Area Segment Address (PS/2)
entry AH 0C1h
return CF set on error
ES segment of data area
Function 0C2h Pointing Device BIOS Interface (DesQview 2.x) (PS/2)
entry AH 0C2h
AL 00h enable/disable
BH 00h disable
01h reset
return BH device ID
02h set sampling rate
BH 00h 10/second
01h 20/second
02h 40/second
03h 60/second
04h 80/second
05h 100/second
06h 200/second
03h set resolution
BH 00h one count per mm
01h two counts per mm
02h four counts per mm
03h eight counts per mm
04h get type
return BH device ID
05h initialize
BH data package size (1 - 8 bytes)
06h get/set scaling factor
BH 00h return device status
return BL status byte
bit 0: right button pressed
bit 1: reserved
bit 2: left button pressed
bit 3: reserved
bit 4: 0=1:1 scaling, 1=2:1 scaling
bit 5: device enabled
bit 6: 0=stream mode, 1=remote mode
bit 7: reserved
CL resolution (see function 03h)
DL sample rate, reports per second
01h set scaling at 1:1
02h set scaling at 2:1
07h set device handler address
ES:BX user device handler
return AL 00h
return CF set on error
AH status
00h successful
01h invalid function
02h invalid input
03h interface error
04h need to resend
05h no device handler installed
note The values in BH for those functions that take it as input are stored
in different locations for each subfunction
Function 0C3h Enable/Disable Watchdog Timeout (PS/2 50+)
entry AH 0C3h
AL 00h disable
01h enable
BX timer counter
return CF set on error
note The watchdog timer generates an NMI
Function 0C4h Programmable Option Select (PS/2 50+)
entry AH 04Ch
AL 00h return base POS register address
01h enable slot
BL slot number
02h enable adapter
return CF set on error
DX base POS register address (if function 00h)
Function 0DEh DesQview Services (DesQview)
entry AH 0DEh
AL 00h Get Program Name
return AX offset into DESQVIEW.DVO of current
program's record:
byte length of name
n bytes name
2 bytes keys to invoke program (second
= 00h if only one key used)
word ? (I see 0 always)
byte end flag: 00h for all but last
entry, which is 0FFh
01h Update "Open Window" Menu
return none
note Reads DESQVIEW.DVO, disables Open menu if file
not in current directory
02h unimplemented in DV 2.0x
return nothing (NOP in DV 2.0x)
03h unimplemented in DV 2.0x
return nothing (NOP in DV 2.0x)
04h Get Available Common Memory
return BX bytes of common memory available
CX largest block available
DX total common memory in bytes
05h Get Available Conventional Memory
return BX K of memory available
CX largest block available
DX total conventional memory in K
06h Get Available Expanded Memory
return BX K of expanded memory available
CX largest block available
DX total expanded memory in K
07h APPNUM Get Current Program's Number
return AX number of program as it appears on the
"Switch Windows" menu
08h GET (unknown)
return AX 0 unknown
1 unknown
09h unimplemented in DV 2.00
return nothing (NOP in DV 2.00)
0Ah DBGPOKE Display Character on Status Line
BL character
return character displayed, next call will display in
next position (which wraps back to the start of
the line if off the right edge of screen)
note 1) Displays character on bottom line of *physical*
screen, regardless of current size of window
(even entirely hidden)
2) Does not know about graphics display modes,
just pokes the characters into display memory
0Bh APILEVEL Define Minimum API Level Required
BL API level
>2 pops up "You need a newer version" error
window in DV 2.00
BH unknown
return AX maximum API level?
0Ch GETMEM Allocate "System" Memory
BX number of bytes
return ES:DI pointer to allocated block
0Dh PUTMEM Deallocate "System" Memory
ES:DI pointer to previously allocated block
return nothing
0Eh Find Mailbox by Name (DV 2.0+)
ES:DI pointer to name to find
CX length of name
return BX 0 not found
1 found
DS:SI object handle
0Fh Enable DesQview Extensions (DV 2.0+)
return AX and BX destroyed (seems to be bug, weren't
saved & restored)
note 1) Sends a manager stream with opcodes AEh, BDh,
and BFh to task's window
2) Enables an additional mouse mode
10h PUSHKEY PUT KEY INTO KEYBOARD INPUT STREAM (DV 2.0+)
BH scan code
BL character
return BX unknown (sometimes, but not always,
same as BX passed in)
note A later read will get the keystroke as if it
had been typed by the user
11h ENABLE/DISABLE AUTO JUSTIFICATION OF WINDOW (DV 2.0+)
BL 0 viewport will not move automatically
nonzero viewport will move to keep cursor
visible
return none
12h unknown (DV 2.0+)
BX 0 clear something?
nonzero set something?
return none
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 16h Keyboard I/O │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0058h) access the keyboard
Function 00h Get Keyboard Input - read the next character in keyboard buffer,
if no key ready, wait for one.
entry AH 00h
return AH scan code
AL ASCII character
Function 01h Check Keystroke Buffer - Do Not Clear
entry AH 01h
return ZF 0 (clear) if character in buffer
1 (set) if no character in buffer
AH scan code of character (if ZF=0)
AL ASCII character if applicable
note Keystroke is not removed from buffer
Function 02h Shift Status - fetch bit flags indicating shift status
entry AH 02h
return AL bit codes (same as [0040:0017])
bit 7 Insert state
bit 6 CapsLock state
bit 5 NumLock state
bit 4 ScrollLock state
bit 3 Alt key
bit 2 Control key
bit 1 Left shift (left caps-shift key)
bit 0 Right shift (right caps-shift key)
note other codes found at [0040:0018]
bit 7 Insert shift (Ins key)
bit 6 Caps shift (CapsLock key)
bit 5 Num shift (NumLock key)
bit 4 Scroll shift (ScrollLock key)
bit 3 Hold state (Ctrl-NumLock is in effect)
Function 03h Keyboard - Set Repeat Rate (PCjr, AT, XT/286, PS/2)
entry AH 03h
AL 00h reset typematic (PCjr)
01h increase initial delay (PCjr)
02h increase continuing delay (PCjr)
03h increase both delays (PCjr)
04h turn off typematic (PCjr)
05h set typematic rate (AT, PS/2)
BH 00h-03h for delays of 250ms, 500ms, 750ms, or 1second
0,0 250ms
0,1 500ms
1,0 750ms
1,1 1 second
BL 00h-1Fh for typematic rates of 30cps down to 2cps
00000 30 01011 10.9 10101 4.5
00001 26.7 01100 10 10110 4.3
00010 24 01101 9.2 10111 4
00011 21.8 01110 8.6 11000 3.7
00100 20 01111 8 11001 3.3
00101 18.5 10000 7.5 11010 3
00110 17.1 10001 6.7 11011 2.7
00111 16 10010 6 11100 2.5
01000 15 10011 5.5 11101 2.3
01001 13.3 10011 5.5 11110 2.1
01010 12 10100 5 11111 2
Function 04h Keyboard Click Toggle (PCjr and Convertible)
entry AH 04h
AL 00h for click off
01h for click on
Function 05h Keyboard Buffer Write (AT or PS/2 with enhanced kbd)
(XT/286, PS/2, AT with "Enhanced" keyboard)
entry AH 05h
CH scan code
CL ASCII character
return AL 01h if buffer full
Function 10h Get Enhanced Keystroke And Read (F11, F12 Enhanced Keyb'd)
(XT/286, PS/2, AT with "Enhanced" keyboard)
entry AH 10h
return AH scan code
AL ASCII character if applicable
Function 11h Check Enhanced Keystroke (F11-F12 on enhanced keyboard)
(XT/286, PS/2, AT with "Enhanced" keyboard)
entry AH 11h
return ZF 0 (clear) if key pressed
1 if buffer empty
AH scan code (when ZF=0)
AL ASCII character if applicable (when ZF=0)
note Keystroke is not removed from buffer
Function 12h Extended Get Shift Status (F11, F12 Enhanced keyboard)
entry AH 12h
return AL bit
0 right Shift key depressed
1 left Shift key depressed
2 Control key depressed
3 Alt key depressed
4 ScrollLock state active
5 NumLock state active
6 CapsLock state active
7 insert state is active
AH 0 left Control key pressed
1 left Alt key depressed
2 right Control key pressed
3 right Alt key depressed
4 Scroll Lock key depressed
5 NumLock key depressed
6 CapsLock key depressed
7 SysReq key depressed
Function F0h Set CPU speed (Compaq 386)
entry AH F0h set speed
return unknown
note used by Compaq DOS MODE command.
parameters not availible
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 17h Printer │
└─────────────────────────────────────────────────────────────────────────────┘
(0:005Ch) access the parallel printer(s)
AH is changed. All other registers left alone.
Function 00h Print Character/send AL to printer DX (0, 1, or 2)
entry AH 00h
AL character
DX printer to be used (0,1,2)
return AH status byte
bit
0 time out
1 unused
2 unused
3 I/O error
4 selected
5 out of paper
6 acknowledge
7 not busy
Function 01h Initialize Printer - set init line low, send 0Ch to printer DX
entry AH 01h
DX printer port to be initialized (0,1,2)
return status as below
Function 02h Printer Status - read status of printer DX into AH
entry AH 02h
DX printer port to be used (0,1,2)
return AH bit flags bit 7 0 = printer is busy
bit 6 ACKnowledge line state
bit 5 out-of-paper line state
bit 4 printer selected line state
bit 3 I/O error
bit 2 unused
bit 1 unused
bit 0 time-out error
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 18h ROM BASIC │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0060h) Execute ROM BASIC at address 0F600h:0000h
note 1) Often reboots a compatible
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 19h Bootstrap Loader │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0064h) Reads track 0, sector 1 into address 0000h:7C00h, then transfers
control to that address. If no diskette drive available,
transfers to ROM-BASIC or displays loader error message.
Causes reboot of disk system if invoked while running.
(no memory test performed).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 1Ah Time of Day │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0068h) access the PC internal clock
Function 00h Read System Time Counter
entry AH 00h
return CX high word of clock count
DX low word of clock count
AL 00h if clock was read or written (via AH=0,1) within the current
24-hour period. Otherwise, AL > 0
Function 01h Set Clock - set # of 55ms clock ticks in system time counter
entry AH 01h
CX:DX high word/low word count of timer ticks
return none
note 1) The clock ticks are incremented by timer interrupt at 18.2065 times
per second or 54.9254milliseconds/count. Therefore:
counts per second = 18 (12h)
counts per minute = 1092 (444h)
counts per hour = 65543 (10011h)
counts per day = 1573040 (1800B0h)
2) counter is zeroed when system is rebooted
Function 02h Read Real Time Clock Time (AT and after)
entry AH 02h
return CH hours in BCD
CL minutes in BCD
DH seconds in BCD
DL 1 (set) if daylight savings time option
CF 1 (set) if clock not operating
Function 03h Set Real Time Clock Time (AT and after)
entry AH 03h
CH hours in BCD
CL minutes in BCD
DH seconds in BCD
DL 0 (clear) if standard time
1 (set) if daylight savings time option
return none
Function 04h Read Real Time Clock Date (AT and after)
entry AH 04h
return CH century in BCD (19 or 20)
CL year in BCD
DH month in BCD
DL day in BCD
CF 1 (set) if clock not operating
Function 05h Set Real Time Clock Date (AT and after)
entry AH 05h
CH century in BCD (19 or 20)
CL year in BCD
DH month in BCD
DL day in BCD
return none
Function 06h Set Real Time Clock Alarm (AT and after)
entry AH 06h
CH hours in BCD
CL minutes in BCD
DH seconds in BCD
return CF set if alarm already set or clock inoperable
note Int 4Ah occurs at specified alarm time every 24hrs until reset
Function 07h Reset Real Time Clock Alarm (AT and after)
entry AH 07h
return none
Function 08h Set Real Time Clock Activated Power On Mode (Convertible)
entry AH 08h
CH hours in BCD
CL minutes in BCD
DH seconds in BCD
Function 09h Read Real Time Clock Alarm Time and Status
(Convertible and PS/2 Model 30)
entry AH 09h
return CH hours in BCD
CL minutes in BCD
DH seconds in BCD
DL alarm status:
00h if alarm not enabled
01h if alarm enabled but will not power up system
02h if alarm will power up system
Function 0Ah Read System-Timer Day Counter (XT-2 [640k motherboard], PS/2)
entry AH 0Ah
return CF set on error
CX count of days since Jan 1,1980
Function 0Bh Set System-Timer Day Counter (XT-2 [640k motherboard], PS/2)
entry AH 0Bh
CX count of days since Jan 1,1980
return CF set on error
Function 80h Set Up Sound Multiplexor (PCjr) (Tandy 1000?)
entry AH 80h
AL 00h source is 8253 channel 2
01h source is cassette input
02h source is I/O channel "audio in"
03h source is TI sound generator chip
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 1Bh Control-Break │
└─────────────────────────────────────────────────────────────────────────────┘
(0:006Ch) This interrupt is called when the keyboard scanner of the IBM
machines detects Ctrl and Break pressed at the same time.
note 1) If the break occurred while processing an interrupt, one or more
end of interrupt commands must be send to the 8259 Programmable
Interrupt Controller.
2) All I/O devices should be reset in case an operation was underway at
the time.
3) It is normally pointed to an IRET during system initialization so that
it does nothing, but some programs change it to return a ctrl-C scan
code and thus invoke int 23h.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 1Ch Timer Tick │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0070h)
note 1) Taken 18.2065 times per second
2) Normally vectors to dummy IRET unless PRINT.COM has been installed.
3) If an application moves the interrupt pointer, it is the responsibility
of that application to save and restore all registers that may be
modified.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 1Dh Vector of Video Initialization Parameters │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0074h) This doubleword address points to 3 sets of 16-bytes containing
data to initialize for video modes for video modes 0 & 1 (40
column), 2 & 3 (80 column), and 4, 5 & 6 (graphics) on the
Motorola 6845 CRT controller chip.
6845 registers:
R0 horizontal total (horizontal sync in characters)
R1 horizontal displayed (characters per line)
R2 horizontal sync position (move display left or right)
R3 sync width (vertical and horizontal pulse: 4-bits each)
R4 vertical total (total character lines)
R5 vertical adjust (adjust for 50 or 60 Hz refresh)
R6 vertical displayed (lines of chars displayed)
R7 vertical sync position (lines shifted up or down)
R8 interlace (bits 4 and 5) and skew (bits 6 and 7)
R9 max scan line addr (scan lines per character row)
R10 cursor start (starting scan line of cursor)
R11 cursor stop (ending scan line of cursor)
R12 video memory start address high byte (6-bits)
R13 video memory start address low byte (8-bits)
R14 cursor address high byte (6-bits)
R15 cursor address low byte (8-bits)
6845 Video Init Tables:
table for modes 0 and 1 \
table for modes 2 and 3 \ each table is 16 bytes long and
table for modes 4,5, and 6 / contains values for 6845 registers
table for mode 7 /
4 words: size of video RAM for modes 0/1, 2/3, 4/5, and 6/7
8 bytes: number of columns in each mode
8 bytes: video controller mode byte for each mode
note 1) There are 4 separate tables, and all 4 must be initialized if all
video modes will be used.
2) The power-on initialization code of the computer points this vector
to the ROM BIOS video routines.
3) IBM recommends that if this table needs to be modified, it should be
copied into RAM and only the nescessary changes made.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 1Eh Vector of Diskette Controller Parameters │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0078h) Dword address points to data base table that is used by BIOS.
Default location is at 0F000:0EFC7h. 11-byte table format:
bytes:
00h 4-bit step rate, 4-bit head unload time
01h 7-bit head load time, 1-bit DMA flag
02h 54.9254 ms counts - delay till motor off (37-38 typ)
03h sector size:
00h 128 bytes
01h 256 bytes
02h 512 bytes
03h 1024 bytes
04h last sector on track (8 or 9 typical)
05h gap between sectors on read/write (42 typical)
06h data length for DMA transfers (0FFh typical)
07h gap length between sectors for format (80 typical)
08h sector fill byte for format (0F6h typical)
09h head settle time (in milliseconds) (15 to 25 typical)
DOS 1.0 0
DOS 2.10 15
DOS 3.1 1
10h motor start time (in 1/8 second intervals) (2 to 4 typ.)
DOS 2.10 2
note 1) This vector is pointed to the ROM BIOS diskette tables on system
initialization
2) IBM recommends that if this table needs to be modified, it should be
copied into RAM and only the nescessary changes made.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 1Fh Pointer to Graphics Character Extensions (Graphics Set 2) │
└─────────────────────────────────────────────────────────────────────────────┘
(0:007Ch) This is the pointer to data used by the ROM video routines to
display characters above ASCII 127 while in CGA medium and high
res graphics modes.
note 1) Doubleword address points to 1K table composed of 28 8-byte character
definition bit-patterns. First byte of each entry is top row, last byte
is bottom row.
2) The first 128 character patterns are located in system ROM.
3) This vector is set to 000:0 at system initialization
4) Used by DOS' external GRAFTABL command
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 20h Terminate Current Program │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0080h)
Issue int 20h to exit from a program. This vector transfers to the logic in
DOS to restore the terminate address, the Ctrl-Break address,and the critical
error exit address to the values they had on entry to the program. All the file
buffers are flushed and all handles are closed. You should close all files
changed in length (see function calls 10h and 3Eh) before issuing this
interrupt. If the changed file is not closed, its length, time, and date are
not recorded correctly in the directory.
For a program to pass a completion code or an error code when terminating, it
must use either function call 4Ch (Terminate a Process) or 31h (Terminate
Process and Stay Resident). These two methods are preferred over using
int 20h and the codes returned by them can be interrogated in batch processing.
Important: Before you issue an interrupt 20h, your program must ensure that
the CS register contains the segment of its program segment prefix.
Interrupt 20h DOS - Terminate Program
entry no parameters
return The following vectors are restored from the Program Segment Prefix:
0Ah Program Terminate
0Eh Control-C
12h Critical Error
note IBM and Microsoft recommend using int 21 Fn 4Ch. Using int 20 is
officially frowned upon since the introduction of DOS 2.0